Separate feature and non feature spec runs on travis

Add database_cleaner gem
Set up coveralls parralel builds in travisci
Require capybara_helper in rails_helper to make clear it affects all tests

Dominik Sander 8 years ago
parent
commit
a6a06c1cd1

+ 11 - 7
.travis.yml

@@ -7,6 +7,8 @@ services:
7 7
 env:
8 8
   global:
9 9
     - APP_SECRET_TOKEN=b2724973fd81c2f4ac0f92ac48eb3f0152c4a11824c122bcf783419a4c51d8b9bba81c8ba6a66c7de599677c7f486242cf819775c433908e77c739c5c8ae118d
10
+    - RSPEC_TASK=spec:nofeatures
11
+    - COVERALLS_PARALLEL=true
10 12
     - secure: fzmSI7PQz6CJiIJNAtLAuy3TMmYCrK4bUil3uufh8JkHfpSGWOZt2i6fZ8yZ7pzwG5Aw7eZDgdFsNcEPJlgUDJhlwjg+QxCJslhotTQ9qI3Ieo85peWlU9dZFTOZcrCu0net/hY2FE4ZpTRb5r8A/DRv9ukA8P8tShhePCjckgg=
11 13
     - secure: YjW07LpRSiC9xB6PhLQ4LVv2VphvF3IacV43PLfvzdagjy14yAwKXTUlSadgRaMbndB2dlCTe3YcY11a/xtX/2HDrF14NHPXQdL7e2dJUS3CDLSKZK26x1SOiaaDIrl1jO1xr5kOUd+564MAcNUzDTJQR4CrWl/5t6EwW4iYQVc=
12 14
     - secure: RJiSTB9Anax6uL6mgYY1m42w71ohlsfIlVCk7ho6W19ZfSzQOfom0mBdeNwfgmXsMMnvnqatfxSg8k3C//pRtI/tjzAovHd7t1YIN1IkDNf9uSpzrIeXXc4fSHaVxnl512oI/eBQy9MSBjVZjrg5XEzLKKEGsZCai+ZKB4PS+nM=
@@ -15,15 +17,21 @@ env:
15 17
     - DATABASE_ADAPTER=postgresql DATABASE_USERNAME=postgres
16 18
     - DOCKER_IMAGE=cantino/huginn-single-process DOCKERFILE=docker/single-process/Dockerfile
17 19
     - DOCKER_IMAGE=cantino/huginn DOCKERFILE=docker/multi-process/Dockerfile
20
+    - RSPEC_TASK=spec:features
18 21
 matrix:
19 22
   exclude:
20 23
     - env: DOCKER_IMAGE=cantino/huginn-single-process DOCKERFILE=docker/single-process/Dockerfile
21 24
     - env: DOCKER_IMAGE=cantino/huginn DOCKERFILE=docker/multi-process/Dockerfile
25
+    - env: RSPEC_TASK=spec:features
22 26
   include:
23 27
     - rvm: 2.3.0
24 28
       env: DATABASE_ADAPTER=mysql2 DOCKER_IMAGE=cantino/huginn-single-process DOCKERFILE=docker/single-process/Dockerfile
25 29
     - rvm: 2.3.0
26 30
       env: DATABASE_ADAPTER=mysql2 DOCKER_IMAGE=cantino/huginn DOCKERFILE=docker/multi-process/Dockerfile
31
+    - rvm: 2.3.0
32
+      env: RSPEC_TASK=spec:features DATABASE_ADAPTER=mysql2
33
+    - rvm: 2.3.0
34
+      env: RSPEC_TASK=spec:features DATABASE_ADAPTER=postgresql DATABASE_USERNAME=postgres
27 35
 rvm:
28 36
 - 2.1
29 37
 - 2.2
@@ -34,7 +42,8 @@ before_install:
34 42
   - sudo apt-get -qq update
35 43
   - sudo apt-get install -y mysql-server
36 44
 script:
37
-  - if [ -z "${DOCKER_IMAGE}" ]; then bundle exec rake db:create db:migrate && bundle exec rake; else ./build_docker_image.sh; fi
45
+  - if [ -z "${DOCKER_IMAGE}" ]; then bundle exec rake db:create db:migrate; else true; fi
46
+  - if [ -z "${DOCKER_IMAGE}" ]; then bundle exec rake $RSPEC_TASK; else ./build_docker_image.sh; fi
38 47
 notifications:
39 48
   irc:
40 49
     channels:
@@ -43,9 +52,4 @@ notifications:
43 52
     - "<%{author}> %{branch} - %{commit} (%{commit_message}): %{message}"
44 53
     - 'Change view : %{compare_url}'
45 54
     - 'Build details : %{build_url}'
46
-  webhooks:
47
-    urls:
48
-      - https://webhooks.gitter.im/e/5f92cc0393c6f1defe0d
49
-    on_success: change  # options: [always|never|change] default: always
50
-    on_failure: always  # options: [always|never|change] default: always
51
-    on_start: never     # options: [always|never|change] default: never
55
+  webhooks: https://coveralls.io/webhook?repo_token=COVERALLS_REPO_TOKEN

+ 1 - 0
Gemfile

@@ -155,6 +155,7 @@ group :development do
155 155
     gem 'shoulda-matchers'
156 156
     gem 'vcr'
157 157
     gem 'webmock', '~> 1.17.4', require: false
158
+    gem 'database_cleaner', '~> 1.5.3'
158 159
   end
159 160
 end
160 161
 

+ 2 - 0
Gemfile.lock

@@ -166,6 +166,7 @@ GEM
166 166
     crack (0.4.2)
167 167
       safe_yaml (~> 1.0.0)
168 168
     daemons (1.1.9)
169
+    database_cleaner (1.5.3)
169 170
     debug_inspector (0.0.2)
170 171
     delayed_job (4.1.1)
171 172
       activesupport (>= 3.0, < 5.0)
@@ -599,6 +600,7 @@ DEPENDENCIES
599 600
   coffee-rails (~> 4.1.1)
600 601
   coveralls
601 602
   daemons (~> 1.1.9)
603
+  database_cleaner (~> 1.5.3)
602 604
   delayed_job (~> 4.1.0)
603 605
   delayed_job_active_record!
604 606
   delorean

+ 9 - 0
lib/tasks/rspec.rake

@@ -0,0 +1,9 @@
1
+if defined? RSpec
2
+  namespace :spec do
3
+    desc 'Run all specs in spec directory (exluding feature specs)'
4
+    RSpec::Core::RakeTask.new(:nofeatures) do |task|
5
+      ENV['RSPEC_TASK'] = 'spec:nofeatures'
6
+      task.exclude_pattern = "spec/features/**/*_spec.rb"
7
+    end
8
+  end
9
+end

+ 10 - 2
spec/capybara_helper.rb

@@ -15,11 +15,19 @@ Capybara.default_max_wait_time = CAPYBARA_TIMEOUT
15 15
 RSpec.configure do |config|
16 16
   config.include Warden::Test::Helpers
17 17
   config.include AlertConfirmer, type: :feature
18
-  config.before :suite do
18
+
19
+  config.before(:suite) do
19 20
     Warden.test_mode!
21
+    DatabaseCleaner.clean_with(:truncation)
22
+  end
23
+
24
+  config.before(:each) do |example|
25
+    DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
26
+    DatabaseCleaner.start
20 27
   end
21 28
 
22
-  config.after :each do
29
+  config.after(:each) do
30
+    DatabaseCleaner.clean
23 31
     Warden.test_reset!
24 32
   end
25 33
 end

+ 1 - 1
spec/features/admin_users_spec.rb

@@ -1,4 +1,4 @@
1
-require 'capybara_helper'
1
+require 'rails_helper'
2 2
 
3 3
 describe Admin::UsersController do
4 4
   it "requires to be signed in as an admin" do

+ 1 - 1
spec/features/create_an_agent_spec.rb

@@ -1,4 +1,4 @@
1
-require 'capybara_helper'
1
+require 'rails_helper'
2 2
 
3 3
 describe "Creating a new agent", js: true do
4 4
   before(:each) do

+ 1 - 1
spec/features/edit_an_agent_spec.rb

@@ -1,4 +1,4 @@
1
-require 'capybara_helper'
1
+require 'rails_helper'
2 2
 
3 3
 describe "Editing an agent", js: true do
4 4
   it "creates an alert if a agent with invalid json is submitted" do

+ 5 - 1
spec/rails_helper.rb

@@ -38,7 +38,7 @@ RSpec.configure do |config|
38 38
   # If you're not using ActiveRecord, or you'd prefer not to run each of your
39 39
   # examples within a transaction, remove the following line or assign false
40 40
   # instead of true.
41
-  config.use_transactional_fixtures = true
41
+  config.use_transactional_fixtures = ENV['RSPEC_TASK'] == 'spec:nofeatures'
42 42
 
43 43
   # rspec-rails 3 will no longer automatically infer an example group's spec type
44 44
   # from the file location. You can explicitly opt-in to this feature using this
@@ -70,3 +70,7 @@ RSpec.configure do |config|
70 70
   config.include SpecHelpers
71 71
   config.include Delorean
72 72
 end
73
+
74
+if ENV['RSPEC_TASK'] != 'spec:nofeatures'
75
+  require 'capybara_helper'
76
+end